package b_nio;

import java.nio.ByteBuffer;

public class PutBufferDemo {
    public static void main(String[] args) {
        // 1.创建一个指定长度的缓冲区，以ByteBuffer为例
        ByteBuffer byteBuffer = ByteBuffer.allocate(10);
        System.out.println(byteBuffer.position());// 0 获取当前索引所在位置
        System.out.println(byteBuffer.limit());// 10 最多能操作到哪个索引
        System.out.println(byteBuffer.capacity());// 10 返回缓冲区总长度
        System.out.println(byteBuffer.remaining());// 10 还有多少个位置能操作
        System.out.println("----------------------------");
        // 修改当前索引位置
        byteBuffer.position(1);
        // 修改最多能操作到哪个索引位置
        byteBuffer.limit(9);
        System.out.println(byteBuffer.position());// 1
        System.out.println(byteBuffer.limit());// 9
        System.out.println(byteBuffer.capacity());// 10 容量不变
        System.out.println(byteBuffer.remaining());// 8
        byteBuffer.position(0).limit(10);
        System.out.println("----------------------------");
        // 添加一个字节
        byteBuffer.put((byte) 97);
        System.out.println(byteBuffer.position());// 1
        System.out.println(byteBuffer.remaining());// 9
        System.out.println("----------------------------");
        // 添加一个字节数组
        byteBuffer.put("012345678".getBytes());
        System.out.println(byteBuffer.position());// 10
        System.out.println(byteBuffer.remaining());// 0
        System.out.println(byteBuffer.hasRemaining());// false 是否还能有操作的
        System.out.println("----------------------------");
        // 当添加超过缓冲区的长度时会报错
        //byteBuffer.put("9".getBytes());
        // 如果缓存区存满后，可以调整position位置进行重复写，这样会覆盖之前存入索引的对应的值
        byteBuffer.position(0);
        byteBuffer.put("9".getBytes());
    }
}
